package com.sky.context;

/**
 * BaseContext 类用于提供一个线程安全的上下文存储，
 * 主要用于保存与当前线程相关联的 ID 信息。
 *
 * 使用 ThreadLocal，可以确保每个线程都有自己的独立副本，
 * 因此不会出现线程之间的干扰和数据污染。
 */
public class BaseContext {

    // ThreadLocal 用于创建一个线程局部变量，确保每个线程都有自己的独立副本
    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * 设置当前线程的 ID。
     *
     * @param id 当前线程需要设置的 ID 值
     */
    public static void setCurrentId(Long id) {
        // 将 ID 值存储到当前线程的 ThreadLocal 中
        threadLocal.set(id);
    }

    /**
     * 获取当前线程的 ID。
     *
     * @return 当前线程存储的 ID 值，如果没有设置则返回 null
     */
    public static Long getCurrentId() {
        // 从当前线程的 ThreadLocal 中获取 ID 值
        return threadLocal.get();
    }

    /**
     * 移除当前线程的 ID。
     *
     * 这个方法通常在请求处理完成后调用，以清理 ThreadLocal 中的值，
     * 避免内存泄漏。
     */
    public static void removeCurrentId() {
        // 从当前线程的 ThreadLocal 中移除 ID 值
        threadLocal.remove();
    }
}